package com.fengye.cloud.reactive.service.command;

import com.netflix.hystrix.*;
import reactor.core.publisher.Flux;

/**
 *
 * @author sky
 * @date 2021年06月02日 11:23 上午
 */

public class AccountCommand extends HystrixCommand<Flux<String>> {

    // private AccountService accountService;

    protected AccountCommand(String name) {
        super(
                Setter.withGroupKey(
                        // 全局唯一标识服务分组名称的HystrixCommandGroupKey，相同的分组会聚合在一起。
                        HystrixCommandGroupKey.Factory.asKey("accountGroup"))

                        .andCommandKey(
                                // 全局唯一标识服务名称的 HystrixCommandKey
                                HystrixCommandKey.Factory.asKey("accountKey"))
                        .andThreadPoolKey(
                                // 全局唯一标识线程名称的 HystrixThreadPoolKey，相同的线程池名称代表使用同一个线程池。
                                HystrixThreadPoolKey.Factory.asKey(name))
                        .andCommandPropertiesDefaults(
                                HystrixCommandProperties.Setter()
                                        .withExecutionTimeoutInMilliseconds(3000)
                        )
                        .andThreadPoolPropertiesDefaults(
                                HystrixThreadPoolProperties.Setter()
                                        .withMaxQueueSize(20)
                                        .withCoreSize(5)
                        )
        );
    }

    /**
     * 完成业务调用
     * @return
     */
    @Override
    protected Flux<String> run() throws Exception {
        return null;
    }

    /**
     * 实现服务回退处理逻辑。
     * @return reactor.core.publisher.Flux<java.lang.String>
     */
    @Override
    protected Flux<String> getFallback() {
        return super.getFallback();
    }
}
